﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Text;
using System.Threading.Tasks;

namespace Lesson5_练习题
{
    #region 泛型方法学习 使用泛型方法查找数组中某个数字的位置 
    //基本思路是写一个静态泛型方法 参数为泛型数组，要查找的数字，返回值为数字在数组中的位置 

    public class Finder
    {
        public static int Fint<T>(T[] arr, T target)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i].Equals(target))  //判断数组中的元素是否等于目标元素
                {
                    return i;
                }


            }
            return -1;
        }
    }


    #endregion
    internal class Program
    {
        static void Main(string[] args)
        {
            //定义一个泛型类型，方法内部判断类型为何类型，并返回类型的名称与占有的字节数
            //如果是int则返回"整型，占4个字节"
            //如果是其它类型，则返回"其它类型"
            Console.WriteLine(Fun<int>());
            Console.WriteLine(Fun<char>());
            Console.WriteLine(Fun<float>());
            Console.WriteLine(Fun<string>());

            int i = Finder.Fint<int>(new int[] { 1,2,3,4,5,6,7,8,9},6);
            Console.WriteLine("目标元素在数组中的位置为{0}",i.ToString());
        }
       
        static string Fun<T>()
        {
            if(typeof(T) == typeof(int))
            {
                return string.Format("{0},占{1}个字节", "整型", sizeof(int));  //format作用是合并字符串
            }

            if (typeof(T) == typeof(char))
             {
                return string.Format("{0},占{1}个字节", "字符型", sizeof(char));
            }
            if (typeof(T) == typeof(float))
            {
                return string.Format("{0},占{1}个字节", "浮点型", sizeof(float));
            }
            if (typeof(T) == typeof(string))
            {
                return string.Format("{0},占{1}个字节", "字符串型", "?");
            }
           return "其它类型";
        }
    }

}

